์˜์ •๋ถ€ ๊ธฐ๋ก๊ณต์œ ๊ด€ ์•„์ดํ…œ ๊ฒ€์ƒ‰ (ํ™ˆํŽ˜์ด์ง€ ์ œ๊ณต์šฉ)

๊ฐœ๋ฐœ ์„œ๋ฒ„ : https://uilib-user.eco-dev.kr/archive

์šด์˜ ์„œ๋ฒ„ : https://www.uilib.go.kr/archive

๐Ÿ“— Query Parameters

ํŒŒ๋ผ๋ฏธํ„ฐ๋ช… ํƒ€์ž… ํ•„์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์ œํ•œ์‚ฌํ•ญ ์„ค๋ช…
keyword String ๋ฐ˜ํ•„์ˆ˜ - - ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ
withInKeyword String ์„ ํƒ - - ๊ฒฐ๊ณผ๋‚ด ์žฌ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ
sortField String ์„ ํƒ - ca, an ์ •๋ ฌ ํ•„๋“œ
orderType String ์„ ํƒ as as, de ์ •๋ ฌ ํƒ€์ž…
page int ์„ ํƒ 1 ์ตœ๋Œ€ 100 ์ด๋™ํ•  ํŽ˜์ด์ง€
sizePerPage int ์„ ํƒ 10 ์ตœ๋Œ€ 50 ํ•œ ํŽ˜์ด์ง€๋‹น ํ‘œ๊ธฐ๋˜๋Š” ์•„์ดํ…œ ๊ฑด ์ˆ˜

ํ•„๋“œ ์ƒ์„ธ ์„ค๋ช…

keyword

๊ฒ€์ƒ‰์–ด

๐Ÿ’ก ๊ฒฐ๊ณผ๋‚ด ์žฌ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์ธ withInKeyword ์ž…๋ ฅ์‹œ์—๋Š” keyword ๊ฐ€ ํ•„์ˆ˜ ์ž…๋‹ˆ๋‹ค.

sortField

์ •๋ ฌ ๊ธฐ์ค€์ด ๋˜๋Š” ํ•„๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

orderType

์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

page

sizePerPage

๐Ÿ“— ์š”์ฒญ ์˜ˆ์‹œ

GET /api/search?keyword=๊ฒ€์ƒ‰์–ด&withInKeyword=์žฌ๊ฒ€์ƒ‰์–ด&sortField=ca&orderType=DESC&page=1&sizePerPage=20

Javascript Fetch ๊ธฐ์ค€ ์˜ˆ์‹œ

const url = 'https://uilib-user.eco-dev.kr/archive/api/search';
const options = {method: 'GET'};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}

๐Ÿ’ฌ ์‘๋‹ต ํ•„๋“œ

โœ… Response Body ๊ตฌ์กฐ ์˜ˆ์‹œ - 200 OK

{
  "searchList": [...],
  "totalCount": 100,
  "totalPage": 10
}

Root ๊ฐ์ฒด

ํ•„๋“œ๋ช… ํƒ€์ž… ์„ค๋ช…
searchList List ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ชฉ๋ก
totalCount int ์ „์ฒด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜
totalPage int ์ „์ฒด ํŽ˜์ด์ง€ ์ˆ˜

Item ๊ฐ์ฒด

ํ•„๋“œ๋ช… ํƒ€์ž… ํ•„์ˆ˜ ์„ค๋ช…
itemIdentifier String ํ•„์ˆ˜ ์•„์ดํ…œ์ฝ”๋“œ
itemName String ํ•„์ˆ˜ ์•„์ดํ…œ๋ช…
produceYear String ์„ ํƒ ์ƒ์‚ฐ์—ฐ๋„
thumbnailFileName String ์„ ํƒ ์ธ๋„ค์ผ ํŒŒ์ผ๋ช…
creatorDetailInfo String ์„ ํƒ ์ƒ์‚ฐ์ž ์ •๋ณด (~ ์™ธ n๊ฑด)
archiveSourceInfo String ์„ ํƒ ์›์†Œ์žฅ์ฒ˜ ์ •๋ณด (~ ์™ธ n๊ฑด)

ํ•„๋“œ ์ƒ์„ธ ์„ค๋ช…

itemIdentifier

์•„์ดํ…œ ์ฝ”๋“œ (์ƒ์„ธ๋ณด๊ธฐ ์ด๋™์‹œ ์‚ฌ์šฉ)

์ƒ์„ธ ๋ณด๊ธฐ URL : {๋„๋ฉ”์ธ์ฃผ์†Œ} + '/page/items/' + {์•„์ดํ…œ ์ฝ”๋“œ}

ํ˜ธ์ถœ ์˜ˆ์‹œ

https://uilib-user.eco-dev.kr/archive/page/items/IT00002594

produceYear

์ƒ์‚ฐ์—ฐ๋„

null ํ˜น์€ ๋นˆ๊ฐ’ ๋ฐ˜ํ™˜์‹œ ๋ฏธ์ƒ ์œผ๋กœ ํ‘œ๊ธฐ

thumbnailFileName

์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช…

์ด๋ฏธ์ง€ ํ‘œ๊ธฐ์‹œ {๋„๋ฉ”์ธ์ฃผ์†Œ}+'/upload/image/th/' + {ํŒŒ์ผ๋ช…}

ํ˜ธ์ถœ ์˜ˆ์‹œ

https://uilib-user.eco-dev.kr/archive/upload/image/th/0933e2764e554b1395f04c917ec4f722.png

โŒ Response Body ๊ตฌ์กฐ ์˜ˆ์‹œ - 400 Bad Request

{
  "errorCode": null,
  "message": "๋ฉ”์„ธ์ง€",
  "errorResult": null,
  "fieldErrors": [...]
}

๐Ÿ“œ ์‘๋‹ต ์˜ˆ์‹œ

์„ฑ๊ณต์‹œ

{
  "totalCount": 0,
  "searchList": [],
  "totalPage": 1
}
{
  "totalCount": 3,
  "searchList": [
    {
      "itemIdentifier": "IT00002594",
      "itemName": "์˜์ •๋ถ€ ๊ธฐ๋ก๊ณต์œ ๊ด€ ๋ฐ์ดํ„ฐ ํ…Œ์ŠคํŠธ์šฉ",
      "produceYear": "2005",
      "thumbnailFileName": "0933e2764e554b1395f04c917ec4f722.png",
      "creatorDetailInfo": "๊ธฐ๋ก๋ฐœ๊ตด๋‹จ ์™ธ 1๊ฑด",
      "archiveSourceInfo": "๊ณ ๋Œ€๋ฏธ์ƒ ์™ธ 1๊ฑด"
    },
    {
      "itemIdentifier": "IT00002550",
      "itemName": "[์˜์ •๋ถ€ ์ „ํˆฌ์™€ ์ „ํ›„ ๋ณต๊ตฌ] ์ „ํ›„ ๋„์‹œ ์žฌ๊ฑด๊ณผ ๋ฏธ๊ตฐ ์ฃผ๋‘”",
      "produceYear": null,
      "thumbnailFileName": null,
      "creatorDetailInfo": "์˜์ •๋ถ€๊ธฐ๋ก๊ณต์œ ๊ด€",
      "archiveSourceInfo": "์˜์ •๋ถ€๊ธฐ๋ก๊ณต์œ ๊ด€"
    },
    {
      "itemIdentifier": "IT00002556",
      "itemName": "[์˜์ •๋ถ€ ์ฃผ๋‘” ๋ฏธ๊ตฐ ์บ ํ”„] ์บ ํ”„ ๋ ˆ๋“œํด๋ผ์šฐ๋“œ(CRC) : ๋„์‹ฌ ๋ณธ๋ถ€๊ธฐ์ง€์˜ ์—ญํ• ๊ณผ ์ฒ ์ˆ˜",
      "produceYear": null,
      "thumbnailFileName": null,
      "creatorDetailInfo": "์˜์ •๋ถ€๊ธฐ๋ก๊ณต์œ ๊ด€",
      "archiveSourceInfo": "์˜์ •๋ถ€๊ธฐ๋ก๊ณต์œ ๊ด€"
    }
  ],
  "totalPage": 1
}

์‹คํŒจ์‹œ

๐Ÿ’ก 4xx ๋กœ ์‘๋‹ต์‹œ front-end ์—์„œ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ํ•œ ๊ฒฝ์šฐ ์ด๋‹ˆ

์œ ์ €์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ  (ํ™”๋ฉด๋‹จ)์ฝ”๋“œ๋ฅผ ํ™•์ธ ํ›„ ์ˆ˜์ • ๋ฐ”๋ž๋‹ˆ๋‹ค.

{
  "errorCode": null,
  "message": "์ •๋ ฌ ํ•„๋“œ๋Š” ca an ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
  "errorResult": null,
  "fieldErrors": null
}

๋‹ค๋ฅธ ์˜ˆ์‹œ

{
  "errorCode": null,
  "message": "๊ฒฐ๊ณผ๋‚ด ์žฌ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ ค๋ฉด ํ†ตํ•ฉ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
  "errorResult": null,
  "fieldErrors": null
}
{
  "errorCode": null,
  "message": "Invalid Input Value",
  "errorResult": null,
  "fieldErrors": [
    {
      "codes": [
        "typeMismatch.searchRequest.page",
        "typeMismatch.page",
        "typeMismatch.int",
        "typeMismatch"
      ],
      "arguments": [
        {
          "codes": [
            "searchRequest.page",
            "page"
          ],
          "arguments": null,
          "defaultMessage": "page",
          "code": "page"
        }
      ],
      "defaultMessage": "Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'page'; For input string: \"222222z\"",
      "objectName": "searchRequest",
      "field": "page",
      "rejectedValue": "222222z",
      "bindingFailure": true,
      "code": "typeMismatch"
    }
  ]
}

๐Ÿ’ก 5xx status ๋ฐ˜ํ™˜์‹œ

์„œ๋ฒ„ ์˜ค๋ฅ˜ ํ˜น์€ ์ผ์‹œ์ ์ธ ์„œ๋ฒ„์ค‘๋‹จ์œผ๋กœ ์ ๋‹นํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ์œ ์ €์—๊ฒŒ ์ถœ๋ ฅ ๋ฐ”๋ž๋‹ˆ๋‹ค.